//#include "CameraToPose.h"
//#include "testout.hpp"
//void singleProcess(CameraToPose &cameraToPose, int mode, int camera_idx, CInstantCamera& camera)
//{
//	CGrabResultPtr ptrGrabResult;
//	CImageFormatConverter formatConverter;
//	formatConverter.OutputPixelFormat = PixelType_BGR8packed;
//	CPylonImage pylonImage;
//	cv::Mat Imagecv;
//	
//	//auto start_1 = std::chrono::high_resolution_clock::now();
//	camera.RetrieveResult(5000, ptrGrabResult, TimeoutHandling_ThrowException);
//	//auto finish_1 = std::chrono::high_resolution_clock::now();
//	//std::chrono::duration<double> elapsed = finish_1 - start_1;
//	//std::cout << "OpenCV converter elapsed time:" << elapsed.count() << "s\n";
//	
//	if (ptrGrabResult && ptrGrabResult->GrabSucceeded()) {
//		// 格式转化
//		formatConverter.Convert(pylonImage, ptrGrabResult);
//		Imagecv = cv::Mat(ptrGrabResult->GetHeight(), ptrGrabResult->GetWidth(), CV_8UC3, (uint8_t*)pylonImage.GetBuffer());
//	}
//	
//	std::vector<cv::Point3d> centerPoints;
//	cameraToPose.readSettings("settings.txt");
//	
//	//auto time_cameraopenend = std::chrono::high_resolution_clock::now();
//	cameraToPose.obtainMarkers(Imagecv, centerPoints);
//	//cameraToPose.obtainMarkershc2(Imagecv, centerPoints);
//	//cameraToPose.obtainMarkerscnn(Imagecv, centerPoints);	
//	//auto time_dianfenleiend = std::chrono::high_resolution_clock::now();
//	//std::chrono::duration<double> calcu_time_dianfenleiend = time_dianfenleiend - time_cameraopenend;
//	//std::cout << "dianfenlei calcu match time:" << calcu_time_dianfenleiend.count() << "s\n";
//	
//	if (centerPoints.size() < 9)//可不要，上个函数已经拦截
//	{
//		cout << "检测到的点数量严重不符合要求！" << endl;
//		//cv::imshow("Current View", cameraToPose.Image);
//		//cv::waitKey(1);
//	}
//	else
//	{
//		cameraToPose.clusterClassification(mode, centerPoints);
//		//auto time_qixiefenleiend = std::chrono::high_resolution_clock::now();
//		//std::chrono::duration<double> calcu_time_qixiefenleiend = time_qixiefenleiend - time_dianfenleiend;
//		//std::cout << "qixiefenlei calcu match time:" << calcu_time_qixiefenleiend.count() << "s\n";
//		
//		cameraToPose.displayImage(mode);
//
//		if (mode == 0) {//矫正模式
//			
//			//HandMachine
//			//cameraToPose.HandMachineClusterClassificationSortMatched(cameraToPose.cluster_hand_machine,
//			//	cameraToPose.cluster_hand_machine_up_matched, cameraToPose.cluster_hand_machine_down_matched,
//			//	cameraToPose.HandMachinelineleftnum, cameraToPose.HandMachinelinerightnum);
//			//cameraToPose.HandMachinesingleimagepointsmatch(cameraToPose.HandMachinelineleftnum, cameraToPose.HandMachinelinerightnum,
//			//	cameraToPose.cluster_hand_machine_up_matched, cameraToPose.cluster_hand_machine_down_matched,
//			//	cameraToPose.decoder_cluster_hand_machine_up_matched, cameraToPose.decoder_cluster_hand_machine_down_matched,
//			//	cameraToPose.decoder_hand_machine_up, cameraToPose.decoder_hand_machine_down);
//			cameraToPose.HandMachineClusterClassifiSortMatchDecodePointsMatch(cameraToPose.cluster_hand_machine,
//				cameraToPose.decoder_cluster_hand_machine_up_matched, cameraToPose.decoder_cluster_hand_machine_down_matched,
//				cameraToPose.decoder_hand_machine_up, cameraToPose.decoder_hand_machine_down);
//			//auto time_0hmatchend = std::chrono::high_resolution_clock::now();
//			//std::chrono::duration<double> calcu_time_0hmatchend = time_0hmatchend - time_qixiefenleiend;
//			//std::cout << "HandMachine calcu match time:" << calcu_time_0hmatchend.count() << "s\n";
//			
//			//Braces
//			cameraToPose.BracesClusterClassification(cameraToPose.cluster_braces,
//				cameraToPose.cluster_Braces_solid, cameraToPose.cluster_Braces_hollow);
//			cameraToPose.Bracessingleimagepointsmatch(cameraToPose.cluster_Braces_solid, cameraToPose.cluster_Braces_solid_matched);
//			//auto time_bmatchend = std::chrono::high_resolution_clock::now();
//			//std::chrono::duration<double> calcu_time_bmatchend = time_bmatchend - time_0hmatchend;
//			//std::cout << "Braces calcu match time:" << calcu_time_bmatchend.count() << "s\n";
//		}
//		else if (mode == 1) {//种植导航模式
//			
//			//HandMachine
//			//cameraToPose.HandMachineClusterClassificationSortMatched(cameraToPose.cluster_hand_machine,
//			//	cameraToPose.cluster_hand_machine_up_matched, cameraToPose.cluster_hand_machine_down_matched,
//			//	cameraToPose.HandMachinelineleftnum, cameraToPose.HandMachinelinerightnum);
//			//cameraToPose.HandMachinesingleimagepointsmatch(cameraToPose.HandMachinelineleftnum, cameraToPose.HandMachinelinerightnum,
//			//	cameraToPose.cluster_hand_machine_up_matched, cameraToPose.cluster_hand_machine_down_matched,
//			//	cameraToPose.decoder_cluster_hand_machine_up_matched, cameraToPose.decoder_cluster_hand_machine_down_matched,
//			//	cameraToPose.decoder_hand_machine_up, cameraToPose.decoder_hand_machine_down);
//			cameraToPose.HandMachineClusterClassifiSortMatchDecodePointsMatch(cameraToPose.cluster_hand_machine,
//				cameraToPose.decoder_cluster_hand_machine_up_matched, cameraToPose.decoder_cluster_hand_machine_down_matched,
//				cameraToPose.decoder_hand_machine_up, cameraToPose.decoder_hand_machine_down);
//			//auto time_hmatchend = std::chrono::high_resolution_clock::now();
//			//std::chrono::duration<double> calcu_time_hmatchend = time_hmatchend - time_qixiefenleiend;
//			//std::cout << "HandMachine calcu match time:" << calcu_time_hmatchend.count() << "s\n";
//			
//			//locator
//			//cameraToPose.locatorClusterClassificationSortMatched(cameraToPose.cluster_locator,
//			//	cameraToPose.cluster_locator_up_matched, cameraToPose.cluster_locator_down_matched,
//			//	cameraToPose.cluster_hollow_sort, cameraToPose.locatorlineleftnum, cameraToPose.locatorlinerightnum);
//			//cameraToPose.locatorsingleimagepointsmatch(cameraToPose.locatorlineleftnum, cameraToPose.locatorlinerightnum,
//			//	cameraToPose.cluster_locator_up_matched, cameraToPose.cluster_locator_down_matched,
//			//	cameraToPose.decoder_cluster_locator_up_matched, cameraToPose.decoder_cluster_locator_down_matched,
//			//	cameraToPose.decoder_locator_up, cameraToPose.decoder_locator_down);
//			cameraToPose.LocatorClusterClassifiSortMatchDecodePointsMatch(cameraToPose.cluster_locator,
//				cameraToPose.cluster_hollow_sort,
//				cameraToPose.decoder_cluster_locator_up_matched, cameraToPose.decoder_cluster_locator_down_matched,
//				cameraToPose.decoder_locator_up, cameraToPose.decoder_locator_down);
//			//auto time_lmatchend = std::chrono::high_resolution_clock::now();
//			//std::chrono::duration<double> calcu_time_lmatchend = time_lmatchend - time_hmatchend;
//			//std::cout << "locator calcu match time:" << calcu_time_lmatchend.count() << "s\n";
//		}
//		else {
//			std::cout << "输入错误模式" << std::endl;
//		}
//		if (camera_idx == 0) {//左目
//			//HandMachine
//			cameraToPose.cluster_hand_machine_up_matched_l = cameraToPose.decoder_cluster_hand_machine_up_matched;
//			cameraToPose.cluster_hand_machine_down_matched_l = cameraToPose.decoder_cluster_hand_machine_down_matched;
//			cameraToPose.decoder_hand_machine_up_l = cameraToPose.decoder_hand_machine_up;
//			cameraToPose.decoder_hand_machine_down_l = cameraToPose.decoder_hand_machine_down;
//			//locator
//			cameraToPose.cluster_locator_up_matched_l = cameraToPose.decoder_cluster_locator_up_matched;
//			cameraToPose.cluster_locator_down_matched_l = cameraToPose.decoder_cluster_locator_down_matched;
//			cameraToPose.decoder_locator_up_l = cameraToPose.decoder_locator_up;
//			cameraToPose.decoder_locator_down_l = cameraToPose.decoder_locator_down;
//			//Braces
//			cameraToPose.cluster_Braces_solid_matched_l = cameraToPose.cluster_Braces_solid_matched;
//		}
//		else {
//			//HandMachine
//			cameraToPose.cluster_hand_machine_up_matched_R = cameraToPose.decoder_cluster_hand_machine_up_matched;
//			cameraToPose.cluster_hand_machine_down_matched_R = cameraToPose.decoder_cluster_hand_machine_down_matched;
//			cameraToPose.decoder_hand_machine_up_R = cameraToPose.decoder_hand_machine_up;
//			cameraToPose.decoder_hand_machine_down_R = cameraToPose.decoder_hand_machine_down;
//			//locator
//			cameraToPose.cluster_locator_up_matched_R = cameraToPose.decoder_cluster_locator_up_matched;
//			cameraToPose.cluster_locator_down_matched_R = cameraToPose.decoder_cluster_locator_down_matched;
//			cameraToPose.decoder_locator_up_R = cameraToPose.decoder_locator_up;
//			cameraToPose.decoder_locator_down_R = cameraToPose.decoder_locator_down;
//			//Braces
//			cameraToPose.cluster_Braces_solid_matched_R = cameraToPose.cluster_Braces_solid_matched;
//		}	
//	}
//}
//
//int main()
//{
//	// Pylon初始化
//	PylonInitialize();
//	CTlFactory& tlFactory = CTlFactory::GetInstance();
//	DeviceInfoList_t devices;
//	if (tlFactory.EnumerateDevices(devices) == 0)
//	{
//		throw RUNTIME_EXCEPTION("No camera present.");
//		return 1;
//	}
//	CInstantCamera camera_1 = tlFactory.CreateDevice(devices[0]);
//	cout << "Using device " << camera_1.GetDeviceInfo().GetModelName() << endl;
//	//camera_1.GetDeviceInfo().GetDeviceIdx;
//	GenApi::INodeMap& nodemap_1 = camera_1.GetNodeMap();
//	camera_1.Open();
//	CBooleanParameter(nodemap_1, "AcquisitionFrameRateEnable").SetValue(true);
//	CFloatParameter(nodemap_1, "AcquisitionFrameRate").SetValue(30);
//	CEnumParameter(nodemap_1, "ExposureTimeMode").SetValue("Standard");
//	CFloatParameter(nodemap_1, "ExposureTime").SetValue(1000);
//	cout << "Frame rate of camera_1: " << CFloatParameter(nodemap_1, "AcquisitionFrameRate").GetValue() << endl;
//	Pylon::String_t camera_1_idx = camera_1.GetDeviceInfo().GetDeviceIdx();
//
//	CInstantCamera camera_2 = tlFactory.CreateDevice(devices[1]);
//	GenApi::INodeMap& nodemap_2 = camera_2.GetNodeMap();
//	camera_2.Open();
//	CEnumParameter(nodemap_2, "ExposureTimeMode").SetValue("Standard");
//	CFloatParameter(nodemap_2, "ExposureTime").SetValue(1000);
//	CBooleanParameter(nodemap_2, "AcquisitionFrameRateEnable").SetValue(true);
//	CFloatParameter(nodemap_2, "AcquisitionFrameRate").SetValue(30);
//	cout << "Frame rate of camera_2: " << CFloatParameter(nodemap_2, "AcquisitionFrameRate").GetValue() << endl;
//	Pylon::String_t camera_2_idx = camera_1.GetDeviceInfo().GetDeviceIdx();
//
//	camera_1.StartGrabbing(GrabStrategy_LatestImageOnly);
//	camera_2.StartGrabbing(GrabStrategy_LatestImageOnly);
//
//	vector<Point3d> xuanzhuanzhongxinvec;
//	xuanzhuanzhongxinvec.clear();
//
//	CameraToPose Leftcamtopose;
//	CameraToPose Rightcamtopose;
//
//	//Leftcamtopose.opencamera();
//
//	//auto time_cameraopen = std::chrono::high_resolution_clock::now();
//
//	//int mode = 0;					//从外面接收参数,0矫正模式,1种植导航模式
//	//Leftcamtopose.registermode = 0;	//从外面接收参数,0端点注册,1轴向注册
//	//Leftcamtopose.registermode = 1;
//	int mode = 1;					
//
//
//	int numberOfImages = 10000;
//	if (mode == 0) {	//矫正模式，循环100次
//		numberOfImages = 10000;
//	}
//	else if (mode == 1) {//种植导航模式，循环无限次
//		numberOfImages = 10000;
//	}
//	for (int idx = 0; idx < numberOfImages; idx++)
//	{
//		cout << "=================================" << idx << "=================================" << endl;
//		
//		//成员变量清空
//		Leftcamtopose.clearPara();
//		Rightcamtopose.clearPara();
//		Leftcamtopose.flag = 0;
//		Rightcamtopose.flag = 0;
//
//		thread proc_1(singleProcess, std::ref(Leftcamtopose), mode, 0, std::ref(camera_1));
//		thread proc_2(singleProcess, std::ref(Rightcamtopose), mode, 1, std::ref(camera_2));//开始执行线程
//		proc_1.join();
//		proc_2.join();						//等待线程结束，同步线程
//		//auto time_thend = std::chrono::high_resolution_clock::now();
//		//std::chrono::duration<double> elapsed_time_thend = time_thend - time_cameraopen;
//		//std::cout << "thread end elapsed time:" << elapsed_time_thend.count() << "s\n";
//
//		//if (Leftcamtopose.flag == 1 || Rightcamtopose.flag == 1) {
//		//	continue;
//		//}
//
//		std::vector<cv::Mat> images;
//		images.clear();
//		images.push_back(Leftcamtopose.Image);
//		images.push_back(Rightcamtopose.Image);
//		cv::Mat output2;
//		cv::hconcat(images, output2);
//		cv::namedWindow("hcontact2", 0);
//		cv::resizeWindow("hcontact2", 1800, 700);
//		cv::imshow("hcontact2", output2);
//		cv::waitKey(1);
//
//		Leftcamtopose.readCalibration("./calib.yaml");
//
//		if (Leftcamtopose.flag == 1 || Rightcamtopose.flag == 1) {   
//			continue;
//		}
//		
//		//HandMachine
//		//auto time_h3dstart = std::chrono::high_resolution_clock::now();	
//		Leftcamtopose.lequalVectopoints3d(
// 			Leftcamtopose.cluster_hand_machine_up_matched_l, Leftcamtopose.cluster_hand_machine_down_matched_l,
// 			Rightcamtopose.cluster_hand_machine_up_matched_R, Rightcamtopose.cluster_hand_machine_down_matched_R,
// 			Leftcamtopose.decoder_hand_machine_up_l, Leftcamtopose.decoder_hand_machine_down_l,
// 			Rightcamtopose.decoder_hand_machine_up_R, Rightcamtopose.decoder_hand_machine_down_R,
// 			Leftcamtopose.hand_machine_equalint, Leftcamtopose.hand_machine_points3d);	
//		//auto time_h3dend = std::chrono::high_resolution_clock::now();
//		//std::chrono::duration<double> calcu_time_h3dend = time_h3dend - time_h3dstart;
//		//std::cout << "HandMachine calcu 3d time:" << calcu_time_h3dend.count() << "s\n";
//
//		//vector<double> diffdishand;
//		//calHandMachineupdowndis(Leftcamtopose.hand_machine_equalint, Leftcamtopose.hand_machine_points3d, diffdishand);
//		//savevecdouble("./diffdishand.txt", diffdishand);
//		//diffdishand.clear();
//
//		Leftcamtopose.getHandMachinePose(Leftcamtopose.hand_machine_equalint,
//			Leftcamtopose.hand_machine_points3d, Leftcamtopose.HandMachine_PoseMatrix);
//		//auto time_hposeend = std::chrono::high_resolution_clock::now();		
//		//std::chrono::duration<double> calcu_time_hposeend = time_hposeend - time_h3dend;
//		//std::cout << "HandMachine calcu pose time:" << calcu_time_hposeend.count() << "s\n";
//				
//		if (mode == 0) {//矫正模式		
//			cout << "jiaozheng" << endl;
//						
//			//Braces
//			Leftcamtopose.BraceslequalVectopoints3d(Leftcamtopose.cluster_Braces_solid_matched_l, Rightcamtopose.cluster_Braces_solid_matched_R,
//				Leftcamtopose.Braces_points3d);
//			//auto time_b3dend = std::chrono::high_resolution_clock::now();
//			//std::chrono::duration<double> calcu_time_b3dend = time_b3dend - time_0hposeend;
//			//std::cout << "Braces calcu 3d time:" << calcu_time_b3dend.count() << "s\n";
//			//Leftcamtopose.getBracePose(Leftcamtopose.Braces_points3d, Leftcamtopose.Braces_PoseMatrix);//不需要求矫正器的坐标系			
//
//			//HandMachineEdge
//			if (Leftcamtopose.registermode == 0) {//端点注册
//				Leftcamtopose.getRelativePose_HandMachineEdge_duandian(Leftcamtopose.HandMachine_PoseMatrix, Leftcamtopose.registermode,
//					Leftcamtopose.Braces_points3d, Leftcamtopose.xoffset, 
//					Leftcamtopose.handPoseInv, Leftcamtopose.bracePosition_offset, Leftcamtopose.relative_T);
//				//保存所有relative_T//需要跳过此次没有得出relative_T的情况
//				if (Leftcamtopose.flag == 1 || Rightcamtopose.flag == 1) {
//					continue;
//				}
//				cv::Mat temp; 
//				Leftcamtopose.relative_T.copyTo(temp);//不能直接用等于
//				Leftcamtopose.relative_Ts.push_back(temp);
//			}
//			else if (Leftcamtopose.registermode == 1) {//轴向注册
//				Leftcamtopose.getRelativePose_HandMachineEdge_zhouxiang(Leftcamtopose.HandMachine_PoseMatrix, Leftcamtopose.registermode,
//					Leftcamtopose.Braces_points3d, Leftcamtopose.relative_Z);
//				//保存所有relative_Z//需要跳过此次没有得出relative_Z的情况
//				if (Leftcamtopose.flag == 1 || Rightcamtopose.flag == 1) {
//					continue;
//				}
//				cv::Mat temp;
//				Leftcamtopose.relative_Z.copyTo(temp);//不能直接用等于
//				Leftcamtopose.relative_Zs.push_back(temp);
//			}	
//		}
//		else if (mode == 1) {//种植导航模式			
//			cout << "zhongzhidaohang" << endl;
//								
//			//locator			
//			Leftcamtopose.lequalVectopoints3d(
//				Leftcamtopose.cluster_locator_up_matched_l, Leftcamtopose.cluster_locator_down_matched_l,
//				Rightcamtopose.cluster_locator_up_matched_R, Rightcamtopose.cluster_locator_down_matched_R,
//				Leftcamtopose.decoder_locator_up_l, Leftcamtopose.decoder_locator_down_l,
//				Rightcamtopose.decoder_locator_up_R, Rightcamtopose.decoder_locator_down_R,
//				Leftcamtopose.locator_equalint, Leftcamtopose.locator_points3d);			
//			//auto time_l3dend = std::chrono::high_resolution_clock::now();		
//			//std::chrono::duration<double> calcu_time_l3dend = time_l3dend - time_hposeend;
//			//std::cout << "locator calcu 3d time:" << calcu_time_l3dend.count() << "s\n";
//
//			//vector<double> diffdislocator;
//			//callocatorupdowndis(Leftcamtopose.locator_equalint, Leftcamtopose.locator_points3d, diffdislocator);
//			//savevecdouble("./diffdislocator.txt", diffdislocator);
//			//diffdislocator.clear();
//
//			Leftcamtopose.getlocatorPose(Leftcamtopose.locator_equalint, Leftcamtopose.locator_points3d,
//				Leftcamtopose.locator_PoseMatrix);			
//			//auto time_lposedend = std::chrono::high_resolution_clock::now();			
//			//std::chrono::duration<double> calcu_time_lposedend = time_lposedend - time_l3dend;
//			//std::cout << "locator calcu pose time:" << calcu_time_lposedend.count() << "s\n";
//
//			//std::chrono::duration<double> elapsed_time = time_lposedend - time_cameraopen;
//			////auto elapsed_time = std::chrono::duration_cast<std::chrono::milliseconds>(time_lposedend - time_cameraopen);
//			//std::cout << "HandMachine&locator get pose elapsed time:" << elapsed_time.count() << "s\n";
//			
//			if (Leftcamtopose.flag == 1 || Rightcamtopose.flag == 1) {
//				continue;
//			}
//			
//			//HandMachineEdge
//			Leftcamtopose.length_current = 70; //从外面接收参数
//			Leftcamtopose.length_duandian = 70;
//			Leftcamtopose.readrelativetrelativez("./relative.txt");//读取文件保存的relative_T、relative_Z
//			Leftcamtopose.getHandMachineEdgePose(Leftcamtopose.HandMachine_PoseMatrix, Leftcamtopose.relative_T, 
//				Leftcamtopose.relative_Z,Leftcamtopose.handPoseInv, Leftcamtopose.bracePosition_offset, 
//				Leftcamtopose.length_current, Leftcamtopose.length_duandian,
//				Leftcamtopose.handMachineEdge_PoseMatrix, Leftcamtopose.handMachineEdge_ZMatrix);
//			//auto time_getHandMachineEdgePoseend = std::chrono::high_resolution_clock::now();
//			//std::chrono::duration<double> elapsed_getHandMachineEdgePoseend = time_getHandMachineEdgePoseend - time_cameraopen;
//			//std::cout << "time getHandMachineEdgePoseend elapsed time:" << elapsed_getHandMachineEdgePoseend.count() << "s\n";
//			
//			//savemat("./handMachineEdgePose.txt", Leftcamtopose.handMachineEdge_PoseMatrix);
//			//diffdislocator.clear();
//
//			if (Leftcamtopose.flag == 1 || Rightcamtopose.flag == 1) {
//				continue;
//			}
//			
//			/////////////////////////////////////////////评测手机反射环坐标系精度////////////////////////////////
//			//计算手机反射环旋转点坐标//旋转点为原点向下偏移138mm（大头往小头看z轴正方向）
//			//Point3d yuandian;
//			//Point3d Veczz;
//			//Point3d xuanzhuanzhongxin;
//			//yuandian = { Leftcamtopose.HandMachine_PoseMatrix.at<double>(0, 3), Leftcamtopose.HandMachine_PoseMatrix.at<double>(1, 3),
//			//	Leftcamtopose.HandMachine_PoseMatrix.at<double>(2, 3) };
//			//Veczz = Point3d(Leftcamtopose.HandMachine_PoseMatrix.at<double>(0, 2), Leftcamtopose.HandMachine_PoseMatrix.at<double>(1, 2),
//			//	Leftcamtopose.HandMachine_PoseMatrix.at<double>(2, 2));
//			//xuanzhuanzhongxin = { yuandian.x + Veczz.x * 138, yuandian.y + Veczz.y * 138, yuandian.z + Veczz.z * 138 };			
//			////cout << "xuanzhuanzhongxin:" << xuanzhuanzhongxin << endl;
//			//cout << "yuandian:" << yuandian <<endl;
//			//xuanzhuanzhongxinvec.push_back(yuandian);
//
//		}
//		else {
//			std::cout << "输入错误模式!" << std::endl;
//		}
//	}
//	if (Leftcamtopose.registermode == 0) {
//		//选取合适的relative_T存入文件
//		Leftcamtopose.saverelativet(Leftcamtopose.relative_Ts, "./relative.txt");
//	}
//	else if (Leftcamtopose.registermode == 1) {
//		//选取合适的relative_Z存入文件
//		Leftcamtopose.saverelativez(Leftcamtopose.relative_Zs, "./relative.txt");
//	}
//	//auto time_saverelativeend = std::chrono::high_resolution_clock::now();
//	//std::chrono::duration<double> elapsed_saverelativeend = time_saverelativeend - time_cameraopen;
//	//std::cout << "time_saverelativeend elapsed time:" << elapsed_saverelativeend.count() << "s\n";
//
//	
//	//cout<<"yuandian:" << endl;
//	//for (const auto& point : xuanzhuanzhongxinvec) {
//	//	std::cout << point << "\n";
//	//}
//
//	return 0;
//}
